Změna poslední zprávy o potvrzení
git commit --amend
otevře váš editor, který vám umožní změnit zprávu o potvrzení posledního potvrzení. Zprávu o potvrzení můžete navíc nastavit přímo v příkazovém řádku pomocí:
git commit --amend -m "Nová zpráva potvrzení"
… To však může způsobit, že zadávání víceřádkových potvrzovacích zpráv nebo drobných oprav bude obtížnější.
Než to uděláte, ujistěte se, že nemáte žádné změny pracovní kopie, jinak budou také potvrzeny. (Nestálé změny nebudou potvrzeny.)
Změna zprávy o potvrzení, kterou jste již odeslali do vzdálené pobočky
Pokud jste již svůj závazek posunuli na vzdálenou větev, pak - po úpravě svého potvrzení místně (jak je popsáno výše) - budete také muset vynutit push potvrzení:
git push - síla
# Nebo
git push -f
Varování: tlačení síly přepíše vzdálenou větev stavem vaší místní. Pokud na vzdálené větvi existují závazky, které ve své místní pobočce nemáte, ztratíte je.
Upozornění: Při změně závazků, které jste již sdíleli s jinými lidmi, buďte opatrní. Úpravy závazků je v zásadě přepíšou tak, aby měly různé SHA ID, což představuje problém, pokud mají ostatní lidé kopie starého potvrzení, které jste přepsali. Kdokoli, kdo má kopii starého potvrzení, bude muset synchronizovat svou práci s nově přepsaným potvrzením, což může být někdy obtížné, takže při pokusu o přepsání sdílené historie potvrzení se ujistěte, že se koordinujete s ostatními, nebo se jen vyhněte přepisu sdílených potvrzení celkem.
Proveďte interaktivní rebase
Další možností je použít interaktivní rebase.
To vám umožní upravit libovolnou zprávu, kterou chcete aktualizovat, i když to není nejnovější zpráva.
Chcete-li udělat Git squash, postupujte takto:
// n je počet potvrzení až do posledního potvrzení, které chcete upravit
git rebase -i HEAD ~ n
Jakmile své závazky zmáčknete - vyberte e / r pro úpravu zprávy:
Důležitá poznámka k interaktivní rebase
Když použijete git rebase -i HEAD ~ n, může jich být více než n. Git "shromáždí" všechny revize v posledních n revizích, a pokud došlo ke sloučení někde mezi tímto rozsahem, uvidíte také všechny revize, takže výsledek bude n +.
Dobrý tip:
Pokud to musíte udělat pro více než jednu větev a při úpravách obsahu můžete čelit konfliktům, nastavte git rerere a nechte Git tyto konflikty automaticky vyřešit za vás.
Dokumentace
git-commit (1) Ruční stránka
git-rebase (1) Ruční stránka
git-push (1) Ruční stránka
|
git commit --amend -m "vaše nová zpráva"
|
Pokud potvrzení, které chcete opravit, není nejnovější:
git rebase --interactive $ parent_of_flawed_commit
Pokud chcete opravit několik chybných revizí, předejte nadřazenou položku nejstaršího z nich.
Přijde editor se seznamem všech závazků od toho, který jste zadali.
Změňte výběr na přeformulování (nebo na starých verzích Gitu, pokud chcete upravit) před všemi závazky, které chcete opravit.
Jakmile uložíte, Git přehraje uvedené revize.
U každého potvrzení, které chcete přeformulovat, vás Git vrátí zpět do vašeho editoru. U každého potvrzení, které chcete upravit, vás Git umístí do shellu. Pokud jste ve skořápce:
Změňte potvrzení jakýmkoli způsobem.
git commit --amend
git rebase - pokračovat
Většina z této sekvence vám bude vysvětlena výstupem různých příkazů, jak jdete. Je to velmi jednoduché; nemusíte si to pamatovat - jen si pamatujte, že git rebase --interactive vám umožní opravit závazky bez ohledu na to, jak dávno byly.
Všimněte si, že nebudete chtít měnit závazky, které jste již tlačili. Nebo možná ano, ale v takovém případě budete muset věnovat velkou pozornost komunikaci se všemi, kdo možná vytáhli vaše závazky a nad nimi udělali práci. Jak mohu obnovit / synchronizovat poté, co někdo odešle rebase nebo reset do publikované větve?
|
Chcete-li upravit předchozí potvrzení, proveďte požadované změny, proveďte tyto změny a poté spusťte
git commit --amend
Tím se v textovém editoru otevře soubor představující vaši novou zprávu o odevzdání. Začíná to naplněno textem ze staré zprávy o potvrzení. Změňte zprávu potvrzení, jak chcete, poté soubor uložte a ukončete editor.
Chcete-li upravit předchozí potvrzení a zachovat stejnou zprávu protokolu, spusťte
git commit --amend -C HLAVA
Chcete-li opravit předchozí potvrzení úplným odstraněním, spusťte
git reset --hard HEAD ^
Pokud chcete upravit více než jednu zprávu o potvrzení, spusťte
git rebase -i HEAD ~ commit_count
(Nahraďte commit_count počtem revizí, které chcete upravit.) Tento příkaz spustí váš editor. Označte první potvrzení (ten, který chcete změnit) jako „upravit“ místo „vybrat“, poté uložte a ukončete editor. Proveďte změnu, kterou chcete potvrdit, a poté spusťte
git commit --amend
git rebase - pokračovat
Poznámka: Můžete také „Provést požadovanou změnu“ z editoru otevřeného git commit --amend
|
Jako užzmíněno, git commit --amend je způsob, jak přepsat poslední potvrzení. Jedna poznámka: pokud byste chtěli také přepsat soubory, příkaz by byl
git commit -a --amend -m "Moje nová zpráva o potvrzení"
|
K tomu můžete také použít git filter-branch.
git filter-branch -f --msg-filter "sed '/ errror / error /'" $ flawed_commit..HEAD
Není to tak snadné jako triviální git commit --amend, ale je to obzvláště užitečné, pokud již máte po své chybné zprávě o potvrzení nějaké sloučení.
Všimněte si, že se to pokusí přepsat každé potvrzení mezi HEAD a chybným potvrzením, takže byste měli svůj příkaz msg-filter vybírat velmi moudře ;-)
|
Dávám přednost tomuto způsobu:
git commit --amend -c
V opačném případě dojde k novému potvrzení s novým ID potvrzení.
|
Pokud používáte nástroj Git GUI, existuje tlačítko s názvem Upravit poslední potvrzení. Klikněte na toto tlačítko a poté se zobrazí vaše poslední soubory potvrzení a zpráva. Stačí upravit tuto zprávu a můžete ji potvrdit novou zprávou o potvrzení.
Nebo použijte tento příkaz z konzoly / terminálu:
git commit -a --amend -m "Moje nová zpráva o potvrzení"
|
Můžete použít rebasing Git. Například pokud chcete změnit zpět na potvrzení bbc643cd, spusťte
$ git rebase bbc643cd ^ - interaktivní
Ve výchozím editoru upravte „vybrat“ na „upravit“ v řádku, jehož potvrzení chcete upravit. Proveďte změny a poté je proveďte pomocí
$ git přidat
Nyní můžete použít
$ git commit --amend
upravit potvrzení a poté
$ git rebase - pokračovat
pro návrat zpět k předchozímu hlavnímu potvrzení.
|
Pokud chcete upravit pouze svou poslední zprávu o odevzdání, proveďte:
git commit --amend
To vás umístí do textového editoru a umožní vám změnit poslední zprávu o potvrzení.
Pokud chcete změnit poslední tři zprávy o potvrzení nebo některou ze zpráv o potvrzení až do tohoto bodu, zadejte HEAD ~ 3 do příkazu git rebase -i:
git rebase -i HLAVA ~ 3
|
Pokud musíte změnit starou zprávu o odevzdání na více větvích (tj. Potvrzení s chybnou zprávou je přítomno ve více větvích), můžete použít:
git filtr-větev -f --msg-filtr \
'sed "s / / / g"' - --všechna
Git vytvoří dočasný adresář pro přepis a dodatečné zálohování starých odkazů v refs / original /.
-f vynutí provedení operace. To je nutné, pokud je dočasný adresář již k dispozici nebo pokud jsou již odkazy uloženy pod refs / original. Pokud tomu tak není, můžete tento příznak zrušit.
- odděluje možnosti větve filtru od možností revize.
--all zajistí, že budou přepsány všechny větve a značky.
Z důvodu zálohy vašich starých odkazů se můžete před spuštěním příkazu snadno vrátit zpět do stavu.
Řekněme, že chcete obnovit svého pána a získat k němu přístup ve větvi old_master:
git checkout -b old_master refs / original / refs / heads / master
|
Použití
git commit --amend
Abychom to podrobně pochopili, vynikající příspěvek je 4. Přepis historie Git. Mluví také o tom, kdy nepoužívat git commit --amend.
|
Pokud je to vaše poslední potvrzení, stačí upravit potvrzení:
git commit --amend -o -m "Nová zpráva potvrzení"
(Pomocí příznaku -o (--only) zajistíte, že změníte pouze zprávu o potvrzení)
Pokud se jedná o zasypané potvrzení, použijte úžasnou interaktivní rebase:
git rebase -i @ ~ 9 # Zobrazit posledních 9 potvrzení v textovém editoru
Najděte požadované potvrzení, změňte výběr na r (přeformulovat) a uložte a zavřete soubor. Hotovo!
Výukový program Miniature Vim (nebo, jak rebase pouze s 8 stisky kláves 3jcwrEscZZ):
Pokud máte čas, spusťte vimtutor
hjkl odpovídají pohybovým klávesám ← ↓ ↑ →
Všechny příkazy mohou mít předponu „range“, např. 3j se posune o tři řádky dolů
i vstoupit do režimu vkládání - text, který napíšete, se objeví v souboru
Esc nebo Ctrlc pro opuštění režimu vložení a návrat do „normálního“ režimu
u vrátit zpět
Ctrlr opakovat
dd, dw, dl k odstranění řádku, slova nebo písmene
cc, cw, cl pro změnu řádku, slova nebo písmene (stejné jako ddi)
yy, yw, yl pro zkopírování („trhnutí“) řádku, slova nebo písmene
p nebo P pro vložení za nebo před aktuální pozici
: Zadáním uložíte (zapíšete) soubor
: q! Zadejte pro ukončení bez uložení
: wqEnter nebo ZZ pro uložení a ukončení
Pokud hodně upravujete text, přepněte na rozložení klávesnice Dvorak, naučte se psát dotyky a naučte se Vim. Stojí to za námahu? Ano.
ProTip ™: Nebojte se experimentovat s „nebezpečnými“ příkazy, které přepisují historii * - Git ve výchozím nastavení neodstraní vaše závazky po dobu 90 dnů; najdete je v reflogu:
$ git reset @ ~ 3 # Vraťte se o tři závazky
$ git reflog
c4f708b HEAD @ {0}: reset: moving to @ ~ 3
2c52489 HEAD @ {1}: commit: more changes
4a5246d HEAD @ {2}: commit: make important changes
e8571e4 HEAD @ {3}: commit: make some changes
... dříve spáchá ...
$ git reset 2c52489
... a jste zpátky tam, kde jste začali
* Dávejte pozor na možnosti jako --hard and --force though - they can discard data.
* Také nepřepisujte historii na žádné pobočky, na kterých spolupracujete.
|
Změnit
Máte pármožnosti zde. Můžete dělat
git commit --amend
pokud je to tvůj poslední závazek.
Interaktivní rebase
Jinak, pokud to není vaše poslední potvrzení, můžete provést interaktivní rebase,
git rebase -i [branched_from] [hash před potvrzením]
Potom uvnitř interaktivní rebase jednoduše přidáte úpravy k tomuto potvrzení. Když to přijde, proveďte git commit --amend a upravte zprávu potvrzení. Pokud se chcete vrátit zpět před tímto bodem spáchání, můžete také použít git reflog a toto potvrzení jen smazat. Pak znovu uděláte git commit.
|
Pokud používáte Git GUI, můžete upravit poslední potvrzení, které nebylo odesláno:
Commit / Amend Last Commit
|
Používám Git GUI, jak jen mohu, a to vám dává možnost změnit poslední potvrzení:
Také git rebase -i origin / master je pěkná mantra, která vám vždy představí závazky, které jste udělali nad masterem, a dá vám možnost upravit, smazat, změnit pořadí nebo squash. Není třeba sehnat ten hash jako první.
|
Páni, takže existuje spousta způsobů, jak toho dosáhnout.
Ještě dalším způsobem, jak to udělat, je smazat poslední potvrzení, ale zachovat jeho změny, abyste neztratili práci. Potom můžete provést další potvrzení s opravenou zprávou. Vypadalo by to asi takto:
git reset --soft HEAD ~ 1
git commit -m 'Nová a opravená zpráva o potvrzení'
Vždy to udělám, pokud zapomenu přidat soubor nebo provést změnu.
Nezapomeňte zadat --soft namísto --hard, jinak o tento závazek přijdete úplně.
|
Pro každého, kdo hledá grafické uživatelské rozhraní Windows / Mac, které by pomohlo s úpravou starších zpráv (tj. Nejen nejnovější zprávy), doporučuji Sourcetree. Kroky, které je třeba dodržet, jsou pod obrázkem.
Pro závazky, které ještě nebyly odeslány na dálkové ovládání:
Ujistěte se, že jste potvrdili nebo uložili všechny aktuální změny (tj. Na kartě „Stav souboru“ nejsou uvedeny žádné soubory) - jinak to nebude fungovat.
Na kartě „Log / History“ klikněte pravým tlačítkem na záznam s navazujícím řádkem v grafu, jeden pod revizemi, které chcete upravit, a vyberte „Rebase děti interaktivně ...“
Vyberte celý řádek se zprávou o potvrzení, kterou chcete změnit (klikněte na sloupec „Zpráva“).
Klikněte na tlačítko „Upravit zprávu“.
Upravte zprávu podle potřeby v dialogovém okně, které se zobrazí, a poté klikněte na OK.
Opakujte kroky 3-4, pokud existují další potvrzení zprávy ke změně.
Klikněte na OK: Rebasing bude zahájen. Pokud je vše v pořádku, výstup skončí „Úspěšně dokončeno“. POZNÁMKA: Někdy jsem to viděl selhat, když jsem nemohl vytvořit 'project_path / .git / index.lock': Soubor existuje. při pokusu o úpravu více zpráv o potvrzení současně. Nejste si jisti, o jaký problém přesně jde, nebo zda bude opraven v budoucí verzi Sourcetree, ale pokud k tomu dojde, doporučil byste je změnit po jednom (pomalejší, ale zdá se spolehlivější).
... Nebo ... pro závazky, které již byly tlačeny:
Postupujte podle kroků v této odpovědi, které jsou podobné výše, ale vyžadují spuštění dalšího příkazu z příkazového řádku (git push origin -f) k vynucení stisknutí větve. Doporučil bych si to všechno přečíst a věnovat potřebnou opatrnost!
|
Pokud chcete pouze upravit nejnovější potvrzení, použijte:
git commit --amend
nebo
git commit --amend -m 'jednořádková zpráva'
Pokud ale chcete upravit několik revizí za sebou, měli byste místo toho použít rebasing:
git rebase -i
Do souboru, jako je ten výše, napište edit / e nebo jednu z dalších možností a stiskněte Uložit a Ukončit.
Nyní budete při prvním chybném spáchání. Proveďte změny v souborech a ty budou automaticky připraveny za vás. Typ
git commit --amend
Uložte a ukončete to a zadejte
git rebase - pokračovat
přejdete na další výběr, dokud nedokončíte všechny své výběry.
Všimněte si, že tyto věci změní všechny vaše hash SHA po tomto konkrétním potvrzení.
|
Pokud chcete změnit pouze svou poslední zprávu, měli byste použít příznak --only nebo jeho zástupce -o s commit --amend:
git commit --amend -o -m "Nová zpráva potvrzení"
Tím je zajištěno, že náhodou nezlepšíte svůj závazek postupnými věcmi. Samozřejmě je nejlepší mít správnou konfiguraci $ EDITOR. Pak můžete vynechat volbu -m a Git předvyplní zprávu o potvrzení starou. Tímto způsobem jej lze snadno upravovat.
|
Aktualizujte svou poslední nesprávnou zprávu o potvrzení novou zprávou o potvrzení v jednom řádku:
git commit --amend -m "vaše nová zpráva o potvrzení"
Nebo zkuste Git reset jako níže:
# Můžete resetovat svoji hlavu na n počet potvrzení
# NENÍ dobrý nápad pro změnu poslední zprávy potvrzení,
#, ale můžete získat nápad rozdělit potvrzení do více závazků
git reset --soft HEAD ^
# Resetuje vás poslední potvrzení. Teď ty
# může znovu potvrdit novou zprávu o odevzdání.
Pomocí resetu můžete rozdělit závazky na menší
git reset vám může také pomoci rozdělit jeden odevzdání na více závazků:
# Resetujte hlavu. Obnovuji poslední závazky:
git reset --soft HEAD ^
# (Více revizí můžete resetovat provedením HEAD ~ 2 (počet revizí)
# Nyní resetujte hlavurozdělit to na více závazků
git reset HEAD
# Přidejte a odevzdejte své soubory samostatně a proveďte více závazků: např
git přidat aplikaci /
git commit -m "přidat všechny soubory do adresáře aplikace"
git přidat konfiguraci /
git commit -m "přidat všechny soubory do konfiguračního adresáře"
Zde jste úspěšně rozdělili své poslední potvrzení na dva závazky.
|
Na tuto otázku existuje spousta odpovědí, ale žádný z nich nevysvětluje velmi podrobně, jak změnit starší zprávy o potvrzení pomocí Vim. Uvízl jsem, když jsem se o to pokoušel sám, takže zde podrobně napíšu, jak jsem to udělal, zejména pro lidi, kteří nemají zkušenosti s Vim!
Chtěl jsem změnit svých pět posledních závazků, které jsem již odeslal na server. To je docela „nebezpečné“, protože pokud už z toho někdo jiný vytáhl, můžete věci pokazit změnou potvrzovacích zpráv. Když však pracujete na své vlastní malé pobočce a jste si jisti, že ji nikdo nevytáhl, můžete to změnit takto:
Řekněme, že chcete změnit svých pět posledních revizí, a potom to napíšete do terminálu:
git rebase -i HLAVA ~ 5
* Kde 5 je počet zpráv o potvrzení, který chcete změnit (takže pokud chcete změnit 10. na poslední potvrzení, zadejte 10).
Tento příkaz vás přenese do Vimu, kde můžete ‚upravit 'svoji historii revizí. Nahoře uvidíte svých posledních pět revizí takto:
vyberte zprávu potvrzení
Místo výběru musíte napsat reword. Můžete to udělat ve Vimu zadáním i. Tím se dostanete do režimu vložení. (Vidíte, že jste v režimu vkládání slovem INSERT v dolní části.) U závazků, které chcete změnit, namísto výběru zadejte slovo.
Poté musíte tuto obrazovku uložit a ukončit. Uděláte to tak, že nejprve přejdete do „příkazového režimu“ stisknutím klávesy Esc (můžete zkontrolovat, zda jste v příkazovém režimu, pokud slovo INSERT dole zmizelo). Potom můžete zadat příkaz zadáním:. Příkaz pro uložení a ukončení je wq. Pokud tedy zadáte: wq, jste na správné cestě.
Pak Vim projde každou zprávu o potvrzení, kterou chcete přeformulovat, a zde můžete skutečně změnit zprávy o potvrzení. Uděláte to tak, že přejdete do režimu vložení, změníte zprávu potvrzení, přejdete do příkazového režimu a uložíte a ukončíte. Udělejte to pětkrát a jste mimo Vim!
Pak, pokud jste již tlačili své špatné závazky, musíte git push --force je přepsat. Nezapomeňte, že git push --force je docela nebezpečná věc, takže se ujistěte, že nikdo nevytáhl ze serveru, protože jste tlačili své špatné závazky!
Nyní jste změnili své potvrzovací zprávy!
(Jak vidíte, nejsem ve Vimu tak zkušený, takže pokud jsem k vysvětlení toho, co se děje, použil nesprávný „žargon“, klidně mě opravte!)
|
Můžete použít git-rebase-reword
Je navržen tak, aby upravoval jakékoli potvrzení (nejen poslední) stejným způsobem jako commit --amend
$ git rebase-reword
Je pojmenován po akci rebase interactive ke změně revize: „reword“. Podívejte se na tento příspěvek a interaktivní sekce - sekce
Příklady:
$ git rebase-reword b68f560
$ git rebase-reword HLAVA ^
|
Přidal jsem aliasy reci a recm pro jeho opětovné přijetí (změnu). Teď to mohu udělat pomocí git recm nebo git recm -m:
$ vim ~ / .gitconfig
[alias]
......
cm = potvrzení
reci = commit --amend
recm = odevzdat - změnit
......
|
Uvědomil jsem si, že jsem stiskl potvrzení s překlepem. Aby bylo možné vrátit zpět, udělal jsem následující:
git commit --amend -m "T-1000, pokročilý prototyp"
git push - síla
Varování: vynucením změn se přepíše vzdálená větev vaší místní. Ujistěte se, že nepřepíšete nic, co si chcete ponechat. Buďte opatrní, pokud jde o sílu tlačit na upravený (přepsaný) závazek, pokud s vámi někdo sdílí větev, protože pokud budou mít starou kopii potvrzení, kterou jste právě přepsali, bude třeba přepsat vlastní historii.
|
Rád používám následující:
stav git
git přidat - vše
git commit -am "zpráva jde o změně"
git pull
git push
|
Pokud jste kód nezasunuli do své vzdálené větve (GitHub / Bitbucket), můžete změnit příkazovou zprávu na příkazovém řádku, jak je uvedeno níže.
git commit --amend -m "Vaše nová zpráva"
Pokud pracujete na konkrétní větvi, postupujte takto:
git commit --amend -m "BRANCH-NAME: nová zpráva"
Pokud jste již kód poslali nesprávnou zprávou a při změně zprávy musíte být opatrní. To znamená, že když změníte zprávu o odevzdání a pokusíte se ji znovu poslat, skončíte s problémy. Aby to bylo hladké, postupujte podle těchto kroků.
Než to uděláte, přečtěte si prosím celou mou odpověď.
git commit --amend -m "BRANCH-NAME: vaše nová zpráva"
git push -f origin BRANCH-NAME # Není to nejlepší praxe. Přečtěte si níže proč?
Důležitá poznámka: Když použijete vynucení síly přímo, můžete skončit s problémy s kódem, které ostatní vývojáři pracují na stejné větvi. Abyste se těmto konfliktům vyhnuli, musíte před použitím síly vytáhnout kód z vaší větvetam:
git commit --amend -m "BRANCH-NAME: vaše nová zpráva"
git pull origin BRANCH-NAME
git push -f původ BRANCH-NAME
Toto je nejlepší postup při změně zprávy o potvrzení, pokud již byla odeslána.
|
Toto není odpověď, kterou hledáte? Přečtěte si další otázky týkající se značek git git-commit git-rewrite-history